package com.os.simulator.memory;

import javafx.beans.Observable;

import java.io.Serializable;

/**
 * @author kezhenxu
 * @version ${VERSION}
 */
public interface IMemoryManager extends Observable, Serializable {

	/**
	 * 分配一块内存空间
	 *
	 * @param size 要分配的大小
	 *
	 * @return 分配到的内存空间的起始地址
	 *
	 * @throws Exception 操作失败时抛出异常
	 */
	int allocate(int size) throws Exception;

	/**
	 * 释放一块内存
	 *
	 * @param location 要释放的内存的起始地址, 由于被分配的内存总是一块一块, 因此回收时将整块回收, 所以不需要结束地址, 结束地址在分配的时候必须记录在内存管理器内部
	 *
	 * @throws Exception 操作失败时抛出异常
	 */
	void free(int location) throws Exception;

	/**
	 * 测试某一bit是否可用
	 *
	 * @param location 要测试的位在内存中的位置
	 *
	 * @return true 如果可用, false 否则
	 */
	boolean bitAvailable(int location);
}
